JavaScript μ±λ₯ μ΅μ ν κΈ°μ μΈ μ½λ λΆν λ° μ§μ° νκ°λ₯Ό ν΅ν΄ μΉμ¬μ΄νΈ μλμ μ¬μ©μ κ²½νμ ν₯μμν€μΈμ. μ΅μ μ κ²°κ³Όλ₯Ό μν΄ κ° κΈ°μ μ μ¬μ©λ²κ³Ό μκΈ°λ₯Ό μμ보μΈμ.
JavaScript μ±λ₯ μ΅μ ν: μ½λ λΆν vs. μ§μ° νκ°
μ€λλ μ λμ§νΈ νκ²½μμ μΉμ¬μ΄νΈ μ±λ₯μ λ§€μ° μ€μν©λλ€. λλ¦° λ‘λ© μκ°μ μ¬μ©μ λΆλ§, λμ μ΄νλ₯ , κΆκ·Ήμ μΌλ‘ λΉμ¦λμ€μ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€. JavaScriptλ λμ μ΄κ³ μΈν°λν°λΈν μΉ κ²½νμ λ§λλ λ° νμμ μ΄μ§λ§, μ£Όμν΄μ λ€λ£¨μ§ μμΌλ©΄ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€. JavaScript μ±λ₯μ μ΅μ ννλ λ κ°μ§ κ°λ ₯ν κΈ°μ μ μ½λ λΆν κ³Ό μ§μ° νκ°μ λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ κ° κΈ°μ μ μλ λ°©μ, μ΄μ , λ¨μ , μ΅μ μ κ²°κ³Όλ₯Ό μ»κΈ° μν΄ μΈμ μ¬μ©ν΄μΌ νλμ§ μμΈν μ΄ν΄λ΄ λλ€.
JavaScript μ΅μ νμ νμμ± μ΄ν΄
μ΅μ μΉ μ ν리μΌμ΄μ μ νλΆν κΈ°λ₯μ μ 곡νκΈ° μν΄ JavaScriptμ ν¬κ² μμ‘΄νλ κ²½μ°κ° λ§μ΅λλ€. κ·Έλ¬λ μ ν리μΌμ΄μ μ 볡μ‘μ±μ΄ μ¦κ°ν¨μ λ°λΌ JavaScript μ½λμ μμ΄ μ¦κ°νμ¬ λ²λ€ ν¬κΈ°κ° 컀μ§λλ€. μ΄λ¬ν ν° λ²λ€μ λΈλΌμ°μ κ° νμ΄μ§κ° μΈν°λν°λΈν΄μ§κΈ° μ μ λͺ¨λ μ½λλ₯Ό λ€μ΄λ‘λ, νμ± λ° μ€νν΄μΌ νλ―λ‘ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μ ν νν°λ§, κ²μ κΈ°λ₯, μ¬μ©μ μΈμ¦, μΈν°λν°λΈ μ ν κ°€λ¬λ¦¬μ κ°μ λ€μν κΈ°λ₯μ΄ μλ λκ·λͺ¨ μ μ μκ±°λ νλ«νΌμ μκ°ν΄ 보μΈμ. μ΄λ¬ν λͺ¨λ κΈ°λ₯μλ μλΉν JavaScript μ½λκ° νμν©λλ€. μ μ ν μ΅μ νκ° μμΌλ©΄ μ¬μ©μλ νΉν λͺ¨λ°μΌ μ₯μΉλ λλ¦° μΈν°λ· μ°κ²°μμ λλ¦° λ‘λ© μκ°μ κ²½νν μ μμ΅λλ€. μ΄λ λΆμ μ μΈ μ¬μ©μ κ²½νκ³Ό μ μ¬μ μΈ κ³ κ° μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
λ°λΌμ JavaScript μ±λ₯ μ΅μ νλ λ¨μν κΈ°μ μ μΈλΆ μ¬νμ΄ μλλΌ κΈμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νκ³ λΉμ¦λμ€ λͺ©νλ₯Ό λ¬μ±νλ λ° μ€μν μΈ‘λ©΄μ λλ€.
μ½λ λΆν : ν° λ²λ€ λΆν΄
μ½λ λΆν μ΄λ 무μμ λκΉ?
μ½λ λΆν μ JavaScript μ½λλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ²ν¬ λλ λ²λ€λ‘ λλλ κΈ°μ μ λλ€. μ ν리μΌμ΄μ μ μ 체 μ½λλ₯Ό 미리 λ‘λνλ λμ λΈλΌμ°μ λ μ΄κΈ° νμ΄μ§ λ‘λμ νμν μ½λλ§ λ€μ΄λ‘λν©λλ€. νμ μ½λ μ²ν¬λ μ¬μ©μκ° μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆκ³Ό μνΈ μμ©ν λ μ£Όλ¬ΈνμΌλ‘ λ‘λλ©λλ€.
λ€μκ³Ό κ°μ΄ μκ°ν΄ 보μΈμ. μ€μ μμ μ μμν΄ λ³΄μΈμ. λͺ¨λ μ± μ μ μ°½λ¬Έμ μ€μ λ£μ΄ λꡬλ μ λλ‘ λ³Ό μ μκ² λ§λλ λμ μ μ€νκ² μ λ³λ μ ν νλͺ©μ νμν©λλ€. λλ¨Έμ§ μ± μ μμ μ λ€λ₯Έ κ³³μ 보κ΄λμ΄ κ³ κ°μ΄ νΉλ³ν μμ²ν λλ§ κ²μλ©λλ€. μ½λ λΆν μ μ΄κΈ° 보기μ νμν μ½λλ§ νμνκ³ νμμ λ°λΌ λ€λ₯Έ μ½λλ₯Ό κ°μ Έμ€λ μ μ¬ν λ°©μμΌλ‘ μλν©λλ€.
μ½λ λΆν μλ λ°©μ
μ½λ λΆν μ λ€μν μμ€μμ ꡬνν μ μμ΅λλ€.
- μ§μ μ λΆν : μ¬κΈ°μλ μ ν리μΌμ΄μ μ μ¬λ¬ λΆλΆμ λν΄ λ³λμ μ§μ μ μ λ§λλ κ²μ΄ ν¬ν¨λ©λλ€. μλ₯Ό λ€μ΄ κΈ°λ³Έ μ ν리μΌμ΄μ , κ΄λ¦¬μ λμ보λ λ° μ¬μ©μ νλ‘ν νμ΄μ§μ λν΄ λ³λμ μ§μ μ μ΄ μμ μ μμ΅λλ€.
- κ²½λ‘ κΈ°λ° λΆν : μ΄ κΈ°μ μ μ ν리μΌμ΄μ μ κ²½λ‘λ₯Ό κΈ°λ°μΌλ‘ μ½λλ₯Ό λΆν ν©λλ€. κ° κ²½λ‘λ μ¬μ©μκ° ν΄λΉ κ²½λ‘λ‘ μ΄λν λλ§ λ‘λλλ νΉμ μ½λ μ²ν¬μ ν΄λΉν©λλ€.
- λμ κ°μ Έμ€κΈ°: λμ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νλ©΄ λ°νμμ μ£Όλ¬ΈνμΌλ‘ λͺ¨λμ λ‘λν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λκ° λ‘λλλ μκΈ°λ₯Ό μΈλ°νκ² μ μ΄ν μ μμΌλ―λ‘ μ€μνμ§ μμ μ½λκ° μ€μ λ‘ νμν λκΉμ§ λ‘λλ₯Ό μ§μ°ν μ μμ΅λλ€.
μ½λ λΆν μ μ΄μ
- ν₯μλ μ΄κΈ° λ‘λ μκ°: μ΄κΈ° λ²λ€ ν¬κΈ°λ₯Ό μ€μμΌλ‘μ¨ μ½λ λΆν μ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² ν₯μμμΌ λ λΉ λ₯΄κ³ μλ΅μ±μ΄ λ°μ΄λ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
- λ€νΈμν¬ λμν κ°μ: νμν μ½λλ§ λ‘λνλ©΄ λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘ν΄μΌ νλ λ°μ΄ν° μμ΄ μ€μ΄λ€μ΄ μ¬μ©μμ μλ² λͺ¨λμ λν λμνμ΄ μ μ½λ©λλ€.
- ν₯μλ μΊμ νμ©λ₯ : λ μμ μ½λ μ²ν¬λ λΈλΌμ°μ μμ μΊμλ κ°λ₯μ±μ΄ λμ νμ λ°©λ¬Έ μ λ€μ λ€μ΄λ‘λν νμκ° μμ΅λλ€.
- λ λμ μ¬μ©μ κ²½ν: λ λΉ λ₯Έ λ‘λ© μκ°κ³Ό κ°μλ λ€νΈμν¬ λμνμ λ λΆλλ½κ³ μ¦κ±°μ΄ μ¬μ©μ κ²½νμ κΈ°μ¬ν©λλ€.
μμ : Reactμ React.lazy λ° Suspense
Reactμμλ React.lazy λ° Suspenseλ₯Ό μ¬μ©νμ¬ μ½λ λΆν μ μ½κ² ꡬνν μ μμ΅λλ€. React.lazyλ₯Ό μ¬μ©νλ©΄ κ΅¬μ± μμλ₯Ό λμ μΌλ‘ κ°μ Έμ¬ μ μκ³ , Suspenseλ κ΅¬μ± μμκ° λ‘λλλ λμ λ체 UI(μ: λ‘λ© μ€νΌλ)λ₯Ό νμνλ λ°©λ²μ μ 곡ν©λλ€.
import React, { Suspense } from 'react';
const OtherComponent = React.lazy(() => import('./OtherComponent'));
function MyComponent() {
return (
Loading... }>
μ΄ μμ μμ OtherComponentλ λ λλ§λ λλ§ λ‘λλ©λλ€. λ‘λλλ λμ μ¬μ©μλ "Loading..." λ©μμ§λ₯Ό λ³΄κ² λ©λλ€.
μ½λ λΆν λꡬ
- Webpack: λ€μν μ½λ λΆν κΈ°μ μ μ§μνλ λ리 μ¬μ©λλ λͺ¨λ λ²λ€λ¬μ λλ€.
- Rollup: μκ³ ν¨μ¨μ μΈ λ²λ€μ λ§λλ λ° μ€μ μ λ λ λ€λ₯Έ λͺ¨λ λ²λ€λ¬μ λλ€.
- Parcel: μ½λ λΆν μ μλμΌλ‘ μ²λ¦¬νλ μ λ‘ κ΅¬μ± λ²λ€λ¬μ λλ€.
- Vite: λΉ λ₯Έ κ°λ° λ° μ΅μ νλ νλ‘λμ λΉλλ₯Ό μν΄ κΈ°λ³Έ ES λͺ¨λμ νμ©νλ λΉλ λꡬμ λλ€.
μ§μ° νκ°: κ³μ° μ§μ°
μ§μ° νκ°λ 무μμ λκΉ?
μ§μ° νκ°(μ§μ° νκ°λΌκ³ λ ν¨)λ μμ κ°μ΄ μ€μ λ‘ νμν λκΉμ§ μμ νκ°λ₯Ό μ§μ°μν€λ νλ‘κ·Έλλ° κΈ°μ μ λλ€. μ¦, κ³μ°μ κ²°κ³Όλ₯Ό 미리 μ κ·Ήμ μΌλ‘ κ³μ°νλ λμ κ²°κ³Όκ° νμν λλ§ μνλ©λλ€.
μ¬λ¬ μ½μ€ μ리λ₯Ό μ€λΉνλ€κ³ μμν΄ λ³΄μΈμ. λͺ¨λ μ리λ₯Ό ν λ²μ μ리νμ§ μμ κ²μ λλ€. λμ κ° μ리λ₯Ό μ 곡ν λλ§ μ€λΉν©λλ€. μ§μ° νκ°λ κ²°κ³Όκ° νμν λλ§ κ³μ°μ μννλ μ μ¬ν λ°©μμΌλ‘ μλν©λλ€.
μ§μ° νκ° μλ λ°©μ
JavaScriptμμλ λ€μν κΈ°μ μ μ¬μ©νμ¬ μ§μ° νκ°λ₯Ό ꡬνν μ μμ΅λλ€.
- ν¨μ: μμ ν¨μλ‘ λννλ©΄ ν¨μκ° νΈμΆλ λκΉμ§ νκ°λ₯Ό μ§μ°ν μ μμ΅λλ€.
- μμ±κΈ°: μμ±κΈ°λ μ£Όλ¬ΈνμΌλ‘ κ°μ μμ±νλ λ°λ³΅κΈ°λ₯Ό λ§λλ λ°©λ²μ μ 곡ν©λλ€.
- λ©λͺ¨μ΄μ μ΄μ : λ©λͺ¨μ΄μ μ΄μ μ λΉμ©μ΄ λ§μ΄ λλ ν¨μ νΈμΆμ κ²°κ³Όλ₯Ό μΊμ±νκ³ λμΌν μ λ ₯μ΄ λ€μ λ°μν λ μΊμλ κ²°κ³Όλ₯Ό λ°ννλ κ²μ ν¬ν¨ν©λλ€.
- νλ‘μ: νλ‘μλ₯Ό μ¬μ©νμ¬ μμ± μ‘μΈμ€λ₯Ό κ°λ‘μ±κ³ μμ± κ°μ΄ μ€μ λ‘ μ‘μΈμ€λ λκΉμ§ κ³μ°μ μ§μ°ν μ μμ΅λλ€.
μ§μ° νκ°μ μ΄μ
- ν₯μλ μ±λ₯: λΆνμν κ³μ°μ μ§μ°ν¨μΌλ‘μ¨ μ§μ° νκ°λ νΉν ν° λ°μ΄ν° μΈνΈ λλ 볡μ‘ν κ³μ°μ μ²λ¦¬ν λ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ μ¬μ©λ κ°μ: μ§μ° νκ°λ μ¦μ νμνμ§ μμ μ€κ° κ°μ μμ±μ νΌνμ¬ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μΌ μ μμ΅λλ€.
- μλ΅μ± ν₯μ: μ΄κΈ° λ‘λ μ€μ λΆνμν κ³μ°μ νΌν¨μΌλ‘μ¨ μ§μ° νκ°λ μ ν리μΌμ΄μ μ μλ΅μ±μ λμΌ μ μμ΅λλ€.
- 무ν λ°μ΄ν° ꡬ쑰: μ§μ° νκ°λ₯Ό μ¬μ©νλ©΄ νμν μμλ§ μ£Όλ¬ΈνμΌλ‘ κ³μ°νμ¬ λ¬΄ν λͺ©λ‘ λλ μ€νΈλ¦Όκ³Ό κ°μ 무ν λ°μ΄ν° κ΅¬μ‘°λ‘ μμ ν μ μμ΅λλ€.
μμ : μ΄λ―Έμ§ μ§μ° λ‘λ©
μ§μ° νκ°μ μΌλ°μ μΈ μ¬μ© μ¬λ‘λ μ΄λ―Έμ§ μ§μ° λ‘λ©μ λλ€. νμ΄μ§μ λͺ¨λ μ΄λ―Έμ§λ₯Ό 미리 λ‘λνλ λμ λ·°ν¬νΈμμ μ²μμλ 보μ΄μ§ μλ μ΄λ―Έμ§μ λ‘λλ₯Ό μ§μ°ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² ν₯μμν€κ³ λ€νΈμν¬ λμν μλΉλ₯Ό μ€μΌ μ μμ΅λλ€.
function lazyLoadImages() {
const images = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
images.forEach((img) => {
observer.observe(img);
});
}
document.addEventListener('DOMContentLoaded', lazyLoadImages);
μ΄ μμ μμλ IntersectionObserver APIλ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§κ° λ·°ν¬νΈμ λ€μ΄μ¬ λ κ°μ§ν©λλ€. μ΄λ―Έμ§κ° 보μ΄λ©΄ ν΄λΉ src μμ±μ΄ ν΄λΉ data-src μμ± κ°μΌλ‘ μ€μ λμ΄ μ΄λ―Έμ§κ° λ‘λλ©λλ€. κ·Έλ° λ€μ κ΄μ°°μλ μ΄λ―Έμ§λ₯Ό λ€μ λ‘λνμ§ μλλ‘ κ΄μ°°μ μ€λ¨ν©λλ€.
μμ : λ©λͺ¨μ΄μ μ΄μ
λ©λͺ¨μ΄μ μ΄μ μ μ¬μ©νμ¬ λΉμ©μ΄ λ§μ΄ λλ ν¨μ νΈμΆμ μ΅μ νν μ μμ΅λλ€. λ€μμ μμ μ λλ€.
function memoize(func) {
const cache = {};
return function(...args) {
const key = JSON.stringify(args);
if (cache[key]) {
return cache[key];
}
const result = func(...args);
cache[key] = result;
return result;
};
}
function expensiveCalculation(n) {
// Simulate a time-consuming calculation
for (let i = 0; i < 100000000; i++) {
// Do something
}
return n * 2;
}
const memoizedCalculation = memoize(expensiveCalculation);
console.time('First call');
console.log(memoizedCalculation(5)); // First call - takes time
console.timeEnd('First call');
console.time('Second call');
console.log(memoizedCalculation(5)); // Second call - returns cached value instantly
console.timeEnd('Second call');
μ΄ μμ μμ memoize ν¨μλ ν¨μλ₯Ό μ
λ ₯μΌλ‘ λ°μ ν΄λΉ ν¨μμ λ©λͺ¨μ΄μ μ΄μ
λ λ²μ μ λ°νν©λλ€. λ©λͺ¨μ΄μ μ΄μ
λ ν¨μλ μ΄μ νΈμΆμ κ²°κ³Όλ₯Ό μΊμ±νλ―λ‘ λμΌν μΈμλ₯Ό μ¬μ©νλ νμ νΈμΆμ μλ ν¨μλ₯Ό λ€μ μ€ννμ§ μκ³ λ μΊμλ κ²°κ³Όλ₯Ό λ°νν μ μμ΅λλ€.
μ½λ λΆν vs. μ§μ° νκ°: μ£Όμ μ°¨μ΄μ
μ½λ λΆν κ³Ό μ§μ° νκ° λͺ¨λ κ°λ ₯ν μ΅μ ν κΈ°μ μ΄μ§λ§ μ±λ₯μ μλ‘ λ€λ₯Έ μΈ‘λ©΄μ ν΄κ²°ν©λλ€.
- μ½λ λΆν : μ½λλ₯Ό λ μμ μ²ν¬λ‘ λλκ³ μ£Όλ¬ΈνμΌλ‘ λ‘λνμ¬ μ΄κΈ° λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄λ λ° μ€μ μ λ‘λλ€. μ£Όλ‘ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ κ°μ νλ λ° μ¬μ©λ©λλ€.
- μ§μ° νκ°: κ°μ΄ μ€μ λ‘ νμν λκΉμ§ κ°μ κ³μ°μ μ§μ°μν€λ λ° μ€μ μ λ‘λλ€. μ£Όλ‘ λΉμ©μ΄ λ§μ΄ λλ κ³μ° λλ ν° λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ μ±λ₯μ κ°μ νλ λ° μ¬μ©λ©λλ€.
λ³Έμ§μ μΌλ‘ μ½λ λΆν μ 미리 λ€μ΄λ‘λν΄μΌ νλ μ½λ μμ μ€μ΄λ λ°λ©΄, μ§μ° νκ°λ 미리 μνν΄μΌ νλ κ³μ° μμ μ€μ λλ€.
μ½λ λΆν vs. μ§μ° νκ°λ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°
μ½λ λΆν
- λκ·λͺ¨ μ ν리μΌμ΄μ : νΉν μ¬λ¬ κ²½λ‘ λλ κΈ°λ₯μ΄ μλ λ§μ JavaScript μ½λκ° μλ μ ν리μΌμ΄μ μ κ²½μ° μ½λ λΆν μ μ¬μ©ν©λλ€.
- μ΄κΈ° λ‘λ μκ° κ°μ : μ½λ λΆν μ μ¬μ©νμ¬ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ κ°μ νκ³ λνν μκ°μ μ€μ λλ€.
- λ€νΈμν¬ λμν κ°μ: μ½λ λΆν μ μ¬μ©νμ¬ λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘ν΄μΌ νλ λ°μ΄ν° μμ μ€μ λλ€.
μ§μ° νκ°
- λΉμ©μ΄ λ§μ΄ λλ κ³μ°: λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ μννκ±°λ ν° λ°μ΄ν° μΈνΈμ μ‘μΈμ€νλ ν¨μμ μ§μ° νκ°λ₯Ό μ¬μ©ν©λλ€.
- μλ΅μ± ν₯μ: μ§μ° νκ°λ₯Ό μ¬μ©νμ¬ μ΄κΈ° λ‘λ μ€μ λΆνμν κ³μ°μ μ§μ°νμ¬ μ ν리μΌμ΄μ μ μλ΅μ±μ ν₯μμν΅λλ€.
- 무ν λ°μ΄ν° ꡬ쑰: 무ν λͺ©λ‘ λλ μ€νΈλ¦Όκ³Ό κ°μ 무ν λ°μ΄ν° κ΅¬μ‘°λ‘ μμ ν λ μ§μ° νκ°λ₯Ό μ¬μ©ν©λλ€.
- λ―Έλμ΄ μ§μ° λ‘λ©: νμ΄μ§ λ‘λ μκ°μ κ°μ νκΈ° μν΄ μ΄λ―Έμ§, λΉλμ€ λ° κΈ°ν λ―Έλμ΄ μμ°μ λν μ§μ° λ‘λ©μ ꡬνν©λλ€.
μ½λ λΆν λ° μ§μ° νκ° κ²°ν©
λ§μ κ²½μ° μ½λ λΆν κ³Ό μ§μ° νκ°λ₯Ό κ²°ν©νμ¬ λ ν° μ±λ₯ ν₯μμ λ¬μ±ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ½λ λΆν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ λ μμ μ²ν¬λ‘ λλ λ€μ μ§μ° νκ°λ₯Ό μ¬μ©νμ¬ ν΄λΉ μ²ν¬ λ΄μμ κ°μ κ³μ°μ μ§μ°ν μ μμ΅λλ€.
μ μ μκ±°λ μ ν리μΌμ΄μ μ μκ°ν΄ 보μΈμ. μ½λ λΆν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ ν λͺ©λ‘ νμ΄μ§, μ ν μΈλΆ μ 보 νμ΄μ§ λ° κ²°μ νμ΄μ§μ λν λ³λμ λ²λ€λ‘ λλ μ μμ΅λλ€. κ·Έλ° λ€μ μ ν μΈλΆ μ 보 νμ΄μ§ λ΄μμ μ§μ° νκ°λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό λ‘λνκ±°λ μ ν μΆμ² κ³μ°μ μ€μ λ‘ νμν λκΉμ§ μ§μ°ν μ μμ΅λλ€.
μ½λ λΆν λ° μ§μ° νκ° μΈ: μΆκ° μ΅μ ν κΈ°μ
μ½λ λΆν κ³Ό μ§μ° νκ°λ κ°λ ₯ν κΈ°μ μ΄μ§λ§ JavaScript μ±λ₯ μ΅μ νμ μμ΄μλ νΌμ¦μ λ μ‘°κ°μΌ λΏμ λλ€. μ±λ₯μ λμ± ν₯μμν€κΈ° μν΄ μ¬μ©ν μ μλ λͺ κ°μ§ μΆκ° κΈ°μ μ λ€μκ³Ό κ°μ΅λλ€.
- μ΅μν: μ½λμμ λΆνμν λ¬Έμ(μ: 곡백, μ£Όμ)λ₯Ό μ κ±°νμ¬ ν¬κΈ°λ₯Ό μ€μ λλ€.
- μμΆ: Gzip λλ Brotliμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό μμΆνμ¬ ν¬κΈ°λ₯Ό λμ± μ€μ λλ€.
- μΊμ±: λΈλΌμ°μ μΊμ± λ° CDN μΊμ±μ νμ©νμ¬ μλ²μ λν μμ² μλ₯Ό μ€μ λλ€.
- νΈλ¦¬ μ °μ΄νΉ: λ²λ€μμ μ¬μ©νμ§ μλ μ½λλ₯Ό μ κ±°νμ¬ ν¬κΈ°λ₯Ό μ€μ λλ€.
- μ΄λ―Έμ§ μ΅μ ν: μ΄λ―Έμ§λ₯Ό μμΆνκ³ , μ μ ν ν¬κΈ°λ‘ μ‘°μ νκ³ , WebPμ κ°μ μ΅μ μ΄λ―Έμ§ νμμ μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μ΅μ νν©λλ€.
- λλ°μ΄μ± λ° μ€λ‘νλ§: μ±λ₯ λ¬Έμ λ₯Ό λ°©μ§νκΈ° μν΄ μ΄λ²€νΈ μ²λ¦¬κΈ°κ° μ€νλλ μλλ₯Ό μ μ΄ν©λλ€.
- ν¨μ¨μ μΈ DOM μ‘°μ: DOM μ‘°μμ μ΅μννκ³ ν¨μ¨μ μΈ DOM μ‘°μ κΈ°μ μ μ¬μ©ν©λλ€.
- μΉ μ컀: κ³μ° μ§μ½μ μΈ μμ μ μΉ μ컀μ μ€νλ‘λνμ¬ κΈ°λ³Έ μ€λ λλ₯Ό μ°¨λ¨νλ κ²μ λ°©μ§ν©λλ€.
κ²°λ‘
JavaScript μ±λ₯ μ΅μ νλ κΈμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νκ³ λΉμ¦λμ€ λͺ©νλ₯Ό λ¬μ±νλ λ° μ€μν μΈ‘λ©΄μ λλ€. μ½λ λΆν κ³Ό μ§μ° νκ°λ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ , λ€νΈμν¬ λμν μλΉλ₯Ό μ€μ΄κ³ , λΆνμν κ³μ°μ μ§μ°μμΌ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μλ λ κ°μ§ κ°λ ₯ν κΈ°μ μ λλ€. μ΄λ¬ν κΈ°μ μ΄ μ΄λ»κ² μλνλμ§, μΈμ μ¬μ©ν΄μΌ νλμ§ μ΄ν΄ν¨μΌλ‘μ¨ λ λΉ λ₯΄κ³ μλ΅μ±μ΄ λ°μ΄λκ³ λ μ¦κ±°μ΄ μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.
νΉμ μ ν리μΌμ΄μ μꡬ μ¬νμ κ³ λ €νκ³ μꡬ μ¬νμ κ°μ₯ μ ν©ν κΈ°μ μ μ¬μ©νλ κ²μ μμ§ λ§μμμ€. μ ν리μΌμ΄μ μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ μ΅μ ν μ λ΅μ λ°λ³΅νμ¬ μ΅μμ μ¬μ©μ κ²½νμ μ 곡νλμ§ νμΈνμμμ€. μ½λ λΆν κ³Ό μ§μ° νκ°μ νμ νμ©νμ¬ κΈ°λ₯μ΄ νλΆν λΏλ§ μλλΌ μ±λ₯μ΄ λ°μ΄λκ³ μ μΈκ³μ μΌλ‘ μ¬μ©νκΈ° μ¦κ±°μ΄ μΉ μ ν리μΌμ΄μ μ λ§λμμμ€.
μΆκ° νμ΅ μλ£
- Webpack μ€λͺ μ: https://webpack.js.org/
- Rollup μ€λͺ μ: https://rollupjs.org/guide/en/
- Vite μ€λͺ μ: https://vitejs.dev/
- MDN μΉ λ¬Έμ - κ΅μ°¨ κ΄μ°°μ API: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
- Google κ°λ°μ - JavaScript μ€ν μ΅μ ν: https://developers.google.com/web/fundamentals/performance/optimizing-javascript/